package com.jdk8.stream;

import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Lesson1 {

    /**
     * stream 的使用
     *
     * 遍历 foreach
     * 匹配 find match
     * 规约 reduce
     * 聚合 max min count
     * 筛选 filter
     * 映射 map
     * 收集 collect ->
     *              统计 (summarizing counting averaging)、
     *              分组(groupingBy partitioningBy)
     *              结合(join),
     *              规约(reduce)
     *              归集(toList toMap toSet)
     * 排序 sorted
     *
     * stream 流的创建方法
     *
     * 1、通过 java.util.Collection.stream() 方法用集合创建流
     *      List<String> list = Arrays.asList("a", "b", "c");
     *      // 创建一个顺序流
     *      Stream<String> stream = list.stream();
     *      // 创建一个并行流
     *      Stream<String> parallelStream = list.parallelStream();
     *
     * 2、使用java.util.Arrays.stream(T[] array)方法用数组创建流
     *      int[] array={1,3,5,6,8};
     *      IntStream stream = Arrays.stream(array);
     *
     * 3、使用Stream的静态方法：of()、iterate()、generate()
     *      Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
     *      Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
     *      stream2.forEach(System.out::println); // 0 2 4 6 8 10
     *      Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
     *      stream3.forEach(System.out::println);
     *
     *
     *
     * */

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1);

        // 遍历输出符合条件的元素
        list.stream().filter(x -> x > 6).forEach(System.out::println);

        // 匹配第一个
        Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst();

        // 匹配任意（适用于并行流）
        Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny();

        // 是否包含符合特定条件的元素
        boolean anyMatch = list.stream().anyMatch(x -> x < 6);
        System.out.println("匹配第一个值：" + findFirst.get());
        System.out.println("匹配任意一个值：" + findAny.get());
        System.out.println("是否存在大于6的值：" + anyMatch);

    }

}
